package cm.tl.pms.util.dataRegister;

import lombok.Data;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 表示数据库表中一列的实体类，通过ResultSet获取列的元数据信息。
 * 字段信息
 *
 * @author: lwp
 * @date: 2024/1/30 13:53
 * @description
 * @version: 1.0
 */
@Data // Lombok注解，自动为所有字段生成getter/setter、equals、hashCode、toString方法
public class Column {

    // 列名称
    private String columnName;

    // 列的数据类型
    private String columnType;

    // 列的大小，例如字符的最大长度，数字类型的精度
    private int columnSize;

    // 标记该列是否允许为null
    private boolean isNullable;

    // 标记该列是否是自动递增的
    private boolean isAutoIncrement;

    // 列的默认值
    private String columnDef;

    // 列的描述或注释
    private String description;

    /**
     * 通过ResultSet构造Column对象，用于从数据库元数据中初始化列属性。
     *
     * @param resultSet 数据库查询结果集，包含列的元数据信息。
     * @throws SQLException 在处理结果集时可能发生的SQL异常。
     */
    public Column(ResultSet resultSet) throws SQLException {
        // 获取列名
        columnName = resultSet.getString("COLUMN_NAME");
        // 获取列类型
        columnType = resultSet.getString("TYPE_NAME");
        // 获取列大小
        columnSize = resultSet.getInt("COLUMN_SIZE");
        // 判断列是否可为空，"YES"表示可为空
        String isNullableValue = resultSet.getString("IS_NULLABLE");
        isNullable = "YES".equals(isNullableValue);
        // 判断是否自动增长，"YES"表示是自动增长列
        String isAutoincrementValue = resultSet.getString("IS_AUTOINCREMENT");
        isAutoIncrement = "YES".equals(isAutoincrementValue);
        // 获取列的默认值
        columnDef = resultSet.getString("COLUMN_DEF");
        // 获取列的描述信息
        description = resultSet.getString("REMARKS");
    }
}
